package tech.aistar.design.singleton.version02;

/**
 * 本类用来演示: 懒汉模式(延迟加载) - 多线程不安全
 *
 * @author: success
 * @date: 2021/3/17 10:31 上午
 */
public class Single02Demo {

    //2. 提供本类的唯一实例
    private static Single02Demo instance = null;

    //1. 私有化构造
    private Single02Demo(){
        System.out.println("Single02Demo...");
    }

    //3. 提供一个公开的方法来返回这个类的唯一实例

    //为什么在多线程环境下是不安全的
    //a. 比如A,B俩个线程同时执行getInstance方法 - 同时进入该方法体
    //b. 有可能instance == null,A和B俩线程同时进行判断,同时为true
    //c. 同时进入到if块中去new Single02Demo();
    public static Single02Demo getInstance(){
        if(instance == null){
            instance = new Single02Demo();
        }
        return instance;
    }
}

class TestSingle02Demo{
    public static void main(String[] args) {
        Single02Demo s1 = Single02Demo.getInstance();
        Single02Demo s2 = Single02Demo.getInstance();
        System.out.println(s1 == s2);//true
    }
}